package org.smart4j.chapter1.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.smart4j.chapter1.entity.CmsReport;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import static java.lang.System.out;

/**
 * Created by ly on 2018/6/29.
 */
public class ListReportExport {

    /**
     * 举报列表导出Excel
     * @param cmsReportList
     * @param fout
     * @throws IOException
     */
    public void ExportReportList(List<CmsReport> cmsReportList, FileOutputStream fout) throws IOException {
        //1.创建工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //1.1创建合并单元格对象
        //举报人
        CellRangeAddress report = new CellRangeAddress(0,0,0,5);//起始行,结束行,起始列,结束列
        //被举报人
        CellRangeAddress reported = new CellRangeAddress(0,0,6,10);//起始行,结束行,起始列,结束列
        //举报信息
        CellRangeAddress reportContent = new CellRangeAddress(0,0,11,13);//起始行,结束行,起始列,结束列

        CellRangeAddress littleTitle = new CellRangeAddress(1,1,0,0);//起始行,结束行,起始列,结束列
        CellRangeAddress littleTitle1 = new CellRangeAddress(1,1,1,1);//起始行,结束行,起始列,结束列

        //2.创建工作表
        HSSFSheet sheet = workbook.createSheet("举报信息列表");

        //小标题样式
        HSSFCellStyle colStyle = ExportExcel.createCellStyle(workbook,(short)15,true,true);
        //大标题样式
        HSSFCellStyle headStyle = ExportExcel.createCellStyle(workbook,(short)20,true,true);
        //派工单
        HSSFCellStyle erStyle = ExportExcel.createCellStyle(workbook,(short)18,true,true);
        //班组和时间
        HSSFCellStyle sanStyle = ExportExcel.createCellStyle(workbook,(short)10,false,false);
        //内容样式
        HSSFCellStyle cellStyle = ExportExcel.createCellStyle(workbook,(short)10,false,true);


        //设置默认列宽
        sheet.setDefaultColumnWidth(15);
        int x = 2;
        if(cmsReportList.size()>0){
            for(CmsReport cmsReport:cmsReportList){
                CellRangeAddress content = new CellRangeAddress(x,x,0,0);//起始行,结束行,起始列,结束列
                sheet.addMergedRegion(content);
                HSSFRow name = sheet.createRow(x);  //创建一个行
                HSSFCell nameCellsan = name.createCell(0); //创建一个单元格，第一列
                HSSFCell nameCellsan1 = name.createCell(1); //创建一个单元格，第一列
                HSSFCell nameCellsan2 = name.createCell(2); //创建一个单元格，第一列
                HSSFCell nameCellsan3 = name.createCell(3); //创建一个单元格，第一列
                HSSFCell nameCellsan4 = name.createCell(4); //创建一个单元格，第一列
                HSSFCell nameCellsan5 = name.createCell(5); //创建一个单元格，第一列
                HSSFCell nameCellsan6 = name.createCell(6); //创建一个单元格，第一列
                HSSFCell nameCellsan7 = name.createCell(7); //创建一个单元格，第一列
                HSSFCell nameCellsan8 = name.createCell(8); //创建一个单元格，第一列
                HSSFCell nameCellsan9 = name.createCell(9); //创建一个单元格，第一列
                HSSFCell nameCellsan10 = name.createCell(10); //创建一个单元格，第一列
                HSSFCell nameCellsan11 = name.createCell(11); //创建一个单元格，第一列
                HSSFCell nameCellsan12 = name.createCell(12); //创建一个单元格，第一列
                HSSFCell nameCellsan13 = name.createCell(13); //创建一个单元格，第一列

                //加载单元格样式
                nameCellsan.setCellStyle(cellStyle);
                nameCellsan.setCellValue(cmsReport.getName());
                nameCellsan1.setCellStyle(cellStyle);
                nameCellsan1.setCellValue(cmsReport.getCard());
                nameCellsan2.setCellStyle(cellStyle);
                nameCellsan2.setCellValue(cmsReport.getPoliticalStatus());
                nameCellsan3.setCellStyle(cellStyle);
                nameCellsan3.setCellValue(cmsReport.getPhone());
                nameCellsan4.setCellStyle(cellStyle);
                nameCellsan4.setCellValue(cmsReport.getWorkUnit());
                nameCellsan5.setCellStyle(cellStyle);
                nameCellsan5.setCellValue(cmsReport.getLevel());
                nameCellsan6.setCellStyle(cellStyle);
                nameCellsan6.setCellValue(cmsReport.getNameTwo());
                nameCellsan7.setCellStyle(cellStyle);
                nameCellsan7.setCellValue(cmsReport.getWorkUnitTwo());
                nameCellsan8.setCellStyle(cellStyle);
                nameCellsan8.setCellValue(cmsReport.getPositionTwo());
                nameCellsan9.setCellStyle(cellStyle);
                nameCellsan9.setCellValue(cmsReport.getWorkUnitTwo());
                nameCellsan10.setCellStyle(cellStyle);
                nameCellsan10.setCellValue(cmsReport.getLevel());
                nameCellsan11.setCellStyle(cellStyle);
                nameCellsan11.setCellValue(cmsReport.getTitle());
                nameCellsan12.setCellStyle(cellStyle);
                nameCellsan12.setCellValue(cmsReport.getProblemCategory());
                nameCellsan13.setCellStyle(cellStyle);
                nameCellsan13.setCellValue(cmsReport.getMainQuestion());
                x++;
            }
        }

        //2.1加载合并单元格对象
        sheet.addMergedRegion(report);
        sheet.addMergedRegion(reported);
        sheet.addMergedRegion(reportContent);
        sheet.addMergedRegion(littleTitle);
        sheet.addMergedRegion(littleTitle1);
        //3.创建标题   举报人信息
        //3.1创建头标题行;并且设置头标题
        HSSFRow rowsan = sheet.createRow(0);  //创建一个行
        HSSFCell cellsan = rowsan.createCell(0); //创建一个单元格，第一列
        HSSFCell cellsan1 = rowsan.createCell(6); //创建一个单元格，第二列
        HSSFCell cellsan2 = rowsan.createCell(11);
        //加载单元格样式
        cellsan.setCellStyle(headStyle);
        cellsan.setCellValue("举报人信息");
        cellsan1.setCellStyle(headStyle);
        cellsan1.setCellValue("被举报人单位信息");
        cellsan2.setCellStyle(headStyle);
        cellsan2.setCellValue("举报内容");

        HSSFRow name = sheet.createRow(1);  //创建一个行
        HSSFCell nameCellsan = name.createCell(0); //创建一个单元格，第一列
        HSSFCell nameCellsan1 = name.createCell(1); //创建一个单元格，第一列
        HSSFCell nameCellsan2 = name.createCell(2); //创建一个单元格，第一列
        HSSFCell nameCellsan3 = name.createCell(3); //创建一个单元格，第一列
        HSSFCell nameCellsan4 = name.createCell(4); //创建一个单元格，第一列
        HSSFCell nameCellsan5 = name.createCell(5); //创建一个单元格，第一列
        HSSFCell nameCellsan6 = name.createCell(6); //创建一个单元格，第一列
        HSSFCell nameCellsan7 = name.createCell(7); //创建一个单元格，第一列
        HSSFCell nameCellsan8 = name.createCell(8); //创建一个单元格，第一列
        HSSFCell nameCellsan9 = name.createCell(9); //创建一个单元格，第一列
        HSSFCell nameCellsan10 = name.createCell(10); //创建一个单元格，第一列
        HSSFCell nameCellsan11 = name.createCell(11); //创建一个单元格，第一列
        HSSFCell nameCellsan12 = name.createCell(12); //创建一个单元格，第一列
        HSSFCell nameCellsan13 = name.createCell(13); //创建一个单元格，第一列

        //加载单元格样式
        nameCellsan.setCellStyle(colStyle);
        nameCellsan.setCellValue("姓名");
        nameCellsan1.setCellStyle(colStyle);
        nameCellsan1.setCellValue("身份证信息");
        nameCellsan2.setCellStyle(colStyle);
        nameCellsan2.setCellValue("政治面貌");
        nameCellsan3.setCellStyle(colStyle);
        nameCellsan3.setCellValue("联系方式");
        nameCellsan4.setCellStyle(colStyle);
        nameCellsan4.setCellValue("单位或地址");
        nameCellsan5.setCellStyle(colStyle);
        nameCellsan5.setCellValue("级别");
        nameCellsan6.setCellStyle(colStyle);
        nameCellsan6.setCellValue("姓名");
        nameCellsan7.setCellStyle(colStyle);
        nameCellsan7.setCellValue("单位");
        nameCellsan8.setCellStyle(colStyle);
        nameCellsan8.setCellValue("职务");
        nameCellsan9.setCellStyle(colStyle);
        nameCellsan9.setCellValue("所在地区");
        nameCellsan10.setCellStyle(colStyle);
        nameCellsan10.setCellValue("职级");
        nameCellsan11.setCellStyle(colStyle);
        nameCellsan11.setCellValue("标题");
        nameCellsan12.setCellStyle(colStyle);
        nameCellsan12.setCellValue("问题类别");
        nameCellsan13.setCellStyle(colStyle);
        nameCellsan13.setCellValue("主要问题");
        //5.输出
        try {
            workbook.write(fout);
        } catch (IOException e) {
            e.printStackTrace();
        }
        fout.close();
        out.close();
    }

}
